package cn.edu.xjtu.work.wordPattern;

import java.util.HashMap;
import java.util.Map;

/**
 * 290. 单词规律
 * 
 * 给定一种规律 pattern 和一个字符串 str ，判断 str 是否遵循相同的规律。
 * 
 * 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
 */
public class Solution {
  public static void main(String[] args) {
    Solution solu = new Solution();
    String s = "abba";
    String pattern = "dog cat cat dog";
    System.out.println(solu.wordPattern(pattern, s));
  }

  public boolean wordPattern(String pattern, String s) {
    String[] strs = s.split(" ");
    if (strs.length != pattern.length()) {
      return false;
    }
    Map<Character, String> ch2Str = new HashMap<>();
    Map<String, Character> str2ch = new HashMap<>();
    for (int i = 0; i < pattern.length(); i++) {
      if (ch2Str.containsKey(pattern.charAt(i))) {
        if (!ch2Str.get(pattern.charAt(i)).equals(strs[i])) {
          return false;
        }

      } else if (str2ch.containsKey(strs[i])) {
        if (str2ch.get(strs[i]) != pattern.charAt(i)) {
          return false;
        }
      } else {
        ch2Str.put(pattern.charAt(i), strs[i]);
        str2ch.put(strs[i], pattern.charAt(i));
      }
    }
    return true;
  }
}
